/**
 * @scope enchant.JGZ.Storage.prototype
 */
enchant.JGZ.Storage = enchant.Class.create({
  /**
   * 初期化
   * @constructs
   */
  initialize : function(key_name) {
    this._storage = new enchant.JGZ.ObjectEx();
    this._LC_KEY  = 'LC_STORAGE_' + key_name;
    var storageValue = localStorage.getItem(this._LC_KEY);
    if (storageValue != null && storageValue != undefined && storageValue != 'undefined') {
      this._storage.apply(JSON.parse(storageValue));
    }
  }, 
  /**
   * 値を保存
   */
  set : function(key, value) {
    var obj = new Object();
    obj[key] = value;
    this._storage.apply(obj);
    this._set();
  },
  _set : function() {
    var str = JSON.stringify(this._storage.o);
    localStorage.setItem(this._LC_KEY, str);
  },
  /**
   * 値を取得する
   */
  get : function(key) {
    var str = localStorage.getItem(this._LC_KEY);
    if (str == null || str == undefined || str == 'undefined') {
      return false;
    }
    var json_str = JSON.parse(str);
    if (json_str[key] !== undefined) {
      return json_str[key];
    }
    return false;
  },
  /**
   * 値をクリアする
   */
  clear : function (key) {
    var str = localStorage.getItem(this._LC_KEY);
    var json_str = JSON.parse(str);
    if (json_str[key] !== undefined) {
      delete json_str[key];
      this._storage.o = json_str;
      this._set();
    }
    return true;
  },
  /**
   * 全ての値をクリア
   */
  destroy : function() {
    this._storage = new enchant.JGZ.ObjectEx();
    localStorage.setItem(this._LC_KEY);
  },
  /**
   * 全てのローカルストレージをクリア
   * このオブジェクト以外のストレージも全てクリアされますので注意して使ってください
   */
  destroyAll : function() {
    localStorage.clear();
  }

});
